home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1998 August / macformat-066.iso / How-to's / Foreign Files / Creator Changer 2.8.4 / Code & Resource / Creator Changer.init.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-06-28  |  7.7 KB  |  284 lines  |  [TEXT/KAHL]

  1. /**********************************************************************
  2.  *    This file contains the functions which initialize the toolbox
  3.  *    and check to see if System 7 is present, and loads the error 
  4.  *    strings into memory.
  5.  **********************************************************************/
  6.  
  7. #include    "QDOffscreen.h"
  8. #include    "Creator Changer.h"
  9. #include    "Creator Changer.init.h"
  10. #include    "AppleEvents.h"
  11. #include    "Folders.h"
  12.  
  13.  
  14. /**********************************************************************
  15.  *    Function Init_Toolbox(), this function initializes the Macintosh 
  16.  *    toolbox so that all of the parts of the program will work.
  17.  **********************************************************************/
  18.  
  19. void Init_Toolbox(void)
  20.     {
  21.     Size        the_size;
  22.         
  23.     MaxApplZone();
  24.     MoreMasters();
  25.     MoreMasters();
  26.     MoreMasters();
  27.  
  28.     InitGraf(&qd.thePort);
  29.     InitFonts();
  30.     FlushEvents(everyEvent, 0);
  31.     InitWindows();
  32.     InitMenus();
  33.     TEInit();
  34.     InitDialogs(NIL_PTR);
  35.     InitCursor();
  36.     
  37.     the_size=sizeof(DialogRecord);
  38.     
  39.     Chng.storage=NewPtr(the_size);
  40.     Pref.storage=NewPtr(the_size);
  41.     About.storage=NewPtr(the_size);
  42.  
  43.     Chng.menu_id=PREF_TYPES_ID;
  44.     Chng.pref_type=PREF_PT;
  45.     Chng.dlog_id=CHNG_TYPE_DLOG_ID;
  46.     Chng.num_items=0;
  47.     
  48.     Edit.menu_id=PREF_TYPES_ID;
  49.     Edit.pref_type=PREF_PT;
  50.     Edit.num_items=0;
  51.     
  52.     Auto.menu_id=AUTO_CHANGE_ID;
  53.     Auto.pref_type=PREF_AC;
  54.     Auto.num_items=0;
  55.     
  56.     About.dlog_id=ABOUT_DLOG_ID;
  57.     
  58.     Pref.menu_id=NIL_PTR;
  59.     Pref.dlog_id=PREF_DLOG_ID;
  60.     Pref.num_items=PREF_MAX_ITEMS;
  61.  
  62.     All_Done=FALSE;
  63.     Maintain_Menu_Items(FrontWindow());
  64.     In_Background=FALSE;
  65.     Sleep_Ticks=10;
  66.     
  67.     }
  68.  
  69.  
  70.  
  71. /**********************************************************************
  72.  *    Function Get_Strings(), this function gets the strings
  73.  *    that are stored in the resources.
  74.  **********************************************************************/
  75.  
  76. void Get_Strings(void)
  77.     {
  78.     
  79.     GetIndString( Types_Error_1,  ERROR_STRING_LIST, TYPES_ERROR_1  );
  80.     GetIndString( Types_Error_2,  ERROR_STRING_LIST, TYPES_ERROR_2  );
  81.     GetIndString( Descr_Error,    ERROR_STRING_LIST, DESC_ERROR     );
  82.     GetIndString( Bad_Item_Error, ERROR_STRING_LIST, BAD_ITEM_ERROR );
  83.     GetIndString( Bad_CF_Type_1,  ERROR_STRING_LIST, BAD_CF_TYPE_1  );
  84.     GetIndString( Bad_CF_Type_2,  ERROR_STRING_LIST, BAD_CF_TYPE_2  );
  85.     GetIndString( Bad_CF_Type_3,  ERROR_STRING_LIST, BAD_CF_TYPE_3  );
  86.     GetIndString( Bad_CF_Type_4,  ERROR_STRING_LIST, BAD_CF_TYPE_4  );
  87.     GetIndString( Multi_File_1,   ERROR_STRING_LIST, MULTI_FILE_1   );
  88.     GetIndString( Multi_File_2,   ERROR_STRING_LIST, MULTI_FILE_2   );
  89.     GetIndString( Multi_File_3,   ERROR_STRING_LIST, MULTI_FILE_3   );
  90.     
  91.     GetIndString( Pref_File_Name, MISC_STRING_LIST,  PREF_FILE_NAME );
  92.     
  93.     }
  94.  
  95.  
  96.  
  97. /**********************************************************************
  98.  *    Function Check_Sys_Type(), this function checks to see if System
  99.  *    seven or later is present, if it isn't then the program quits.
  100.  **********************************************************************/
  101.  
  102. void Check_Sys_Type(void)
  103.     {
  104.     
  105.     short        sys_7=0x0700;
  106.     short        vers_requsted=1;
  107.     SysEnvRec    the_environ;
  108.     
  109.     SysEnvirons(vers_requsted, &the_environ);
  110.     
  111.     if(the_environ.systemVersion>=sys_7) All_Done=FALSE;
  112.     else
  113.         {
  114.         GetIndString(Sys7_Error_1, ERROR_STRING_LIST, SYS7_ERROR_1);
  115.         GetIndString(Sys7_Error_2, ERROR_STRING_LIST, SYS7_ERROR_2);
  116.         Do_Error(Sys7_Error_1, EMPTY_STR, Sys7_Error_2, EMPTY_STR);
  117.         ExitToShell();
  118.         }
  119.     
  120.     }
  121.  
  122.  
  123. /**********************************************************************
  124.  *    Function Check_Drag_Manager(), this function checks to see if the 
  125.  *    computer has the drag manager.
  126.  **********************************************************************/
  127.  
  128. void Check_Drag_Manager(void)
  129.     {
  130.     
  131.     long            gestaltResponse;
  132.     
  133.     if( (Gestalt(gestaltDragMgrAttr, &gestaltResponse)!=noErr) || (!(gestaltResponse&(1<<gestaltDragMgrPresent))) )
  134.         Has_Drag_Mgr=FALSE;
  135.     else Has_Drag_Mgr=TRUE;
  136.     
  137.     }
  138.  
  139.  
  140. /**********************************************************************
  141.  *    Function Open_Preferences(), this function opens the preference
  142.  *    file that is used to set creator types.
  143.  **********************************************************************/
  144.  
  145. void Open_Preferences(void)
  146.     {
  147.     
  148.     Handle            pref_string, TMPL_handle[3], global_vals;
  149.     OSErr            file_Err;
  150.     short            i;
  151.     pref_types        **pt_handle[4];
  152.     auto_chng        **ac_handle[3];
  153.  
  154.     CreatorChangerApp=CurResFile();
  155.     
  156.     file_Err=FindFolder(kOnSystemDisk, kPreferencesFolderType, kDontCreateFolder, &Pref_VRef, &Pref_Dir_ID);
  157.     if(file_Err==noErr) file_Err=FSMakeFSSpec(Pref_VRef, Pref_Dir_ID, Pref_File_Name, &Pref_Spec);
  158.     if(file_Err==fnfErr)
  159.         {
  160.         FSpCreateResFile(&Pref_Spec, 'CPrf', kPreferencesFolderType, -1);
  161.         CreatorChangerPref=FSpOpenResFile(&Pref_Spec, 3);
  162.         
  163.         pref_string=(Handle)GetResource('STR ', -16397);
  164.         DetachResource(pref_string);
  165.         HLock(pref_string);
  166.         
  167.         for(i=0;i<=2;i++)
  168.             {
  169.             TMPL_handle[i]=GetResource('TMPL', Strt_Rsrc+i);
  170.             DetachResource(TMPL_handle[i]);
  171.             HLock(TMPL_handle[i]);
  172.             }
  173.         
  174.         for(i=0;i<=3;i++)
  175.             {
  176.             pt_handle[i]=(pref_types **)GetResource('pref', Strt_Rsrc+i);
  177.             DetachResource((Handle)pt_handle[i]);
  178.             HLock((Handle)pt_handle[i]);
  179.             }
  180.         
  181.         for(i=4;i<=6;i++)
  182.             {
  183.             ac_handle[i-4]=(auto_chng **)GetResource('pref', Strt_Rsrc+i);
  184.             DetachResource((Handle)ac_handle[i-4]);
  185.             HLock((Handle)ac_handle[i-4]);
  186.             }
  187.  
  188.         global_vals=GetResource('pref', Strt_Rsrc+7);
  189.         DetachResource(global_vals);
  190.         HLock(global_vals);
  191.         
  192.         UseResFile(CreatorChangerPref);
  193.             AddResource(pref_string, 'STR ', -16397, NIL_PTR);
  194.             AddResource(global_vals, PREF_GL, 128, NIL_PTR);
  195.             
  196.             AddResource(TMPL_handle[0], 'TMPL', 128, "\pCCpt");
  197.             AddResource(TMPL_handle[1], 'TMPL', 129, "\pCCgl");
  198.             AddResource(TMPL_handle[2], 'TMPL', 130, "\pCCac");
  199.             
  200.             for(i=0;i<=3;i++) AddResource((Handle)pt_handle[i], PREF_PT, Strt_Rsrc+i, (**pt_handle[i]).Description);
  201.             for(i=0;i<=2;i++) AddResource((Handle)ac_handle[i], PREF_AC, Strt_Rsrc+i, (**ac_handle[i]).Name);
  202.             UpdateResFile(CreatorChangerPref);
  203.         UseResFile(CreatorChangerApp);
  204.         
  205.         HUnlock(pref_string);
  206.         ReleaseResource(pref_string);
  207.         
  208.         HUnlock(global_vals);
  209.         ReleaseResource(global_vals);
  210.         
  211.         for(i=0;i<=2;i++)
  212.             {
  213.             HUnlock(TMPL_handle[i]);
  214.             ReleaseResource(TMPL_handle[i]);
  215.             }
  216.         for(i=0;i<=3;i++)
  217.             {
  218.             HUnlock((Handle)pt_handle[i]);
  219.             ReleaseResource((Handle)pt_handle[i]);
  220.             }
  221.         for(i=0;i<=2;i++)
  222.             {
  223.             HUnlock((Handle)ac_handle[i]);
  224.             ReleaseResource((Handle)ac_handle[i]);
  225.             }
  226.         
  227.         UseResFile(CreatorChangerPref);
  228.             Chng.num_items=Edit.num_items=CountResources(PREF_PT);
  229.             Auto.num_items=CountResources(PREF_AC);
  230.             Global=(global_prefs **)GetResource(PREF_GL, 128);
  231.             HLock((Handle)Global);
  232.         UseResFile(CreatorChangerApp);
  233.             
  234.         }
  235.     else
  236.         {
  237.         CreatorChangerPref=FSpOpenResFile(&Pref_Spec, 3);
  238.  
  239.         UseResFile(CreatorChangerPref);
  240.             Chng.num_items=Edit.num_items=CountResources(PREF_PT);
  241.             Auto.num_items=CountResources(PREF_AC);
  242.             Global=(global_prefs **)GetResource(PREF_GL, 128);
  243.             HLock((Handle)Global);
  244.         UseResFile(CreatorChangerApp);
  245.         }
  246.     
  247.     }
  248.  
  249.  
  250.  
  251. /**********************************************************************
  252.  *    Function Set_Up_Menu_Bar(), this function displays the menu bar
  253.  *    for the program. 
  254.  **********************************************************************/
  255.  
  256. void Set_Up_Menu_Bar(void)
  257.     {
  258.     
  259.     Handle    menu_bar;
  260.     
  261.     menu_bar=GetNewMBar(MAIN_MENU_BAR_ID);
  262.     SetMenuBar(menu_bar);
  263.     Apple_Menu=GetMenuHandle(APPLE_MENU_ID);
  264.     File_Menu=GetMenuHandle(FILE_MENU_ID);
  265.     Edit_Menu=GetMenuHandle(EDIT_MENU_ID);
  266.     AppendResMenu(Apple_Menu, 'DRVR');
  267.     DrawMenuBar();
  268.     
  269.     }
  270.  
  271.  
  272.  
  273. /**********************************************************************
  274.  *    Function Do_Error(), this function does the error routine.
  275.  **********************************************************************/
  276.  
  277. void Do_Error(StringPtr s1, StringPtr s2, StringPtr s3, StringPtr s4)
  278.     {
  279.     
  280.     ParamText(s1, s2, s3, s4);
  281.     Alert(ERROR_ALERT_ID, NIL_PTR);
  282.     
  283.     }
  284.